package com.aoyama.juc.volatiles;

import java.util.concurrent.TimeUnit;

/**
 * @author ：qs
 * @date ：Created in 2022/6/5
 * @description：
 * @modified By：
 */
/* 笔记
 * 1.当没有加Volatile的时候,while循环会一直在里面转圈
 * 2.当加了之后Volatile,由于可见性,一旦num改了之后,就会通知其他线程
 * 3.还有注意的时候不能用if,if不会重新拉回来再判断一次
 * */
public class Video04_02 {

    public static void main(String[] args) {
        MyData2 myData = new MyData2();

        new Thread(() ->{
            System.out.println(Thread.currentThread().getName() + "\t come in ");
            try {
                TimeUnit.SECONDS.sleep(3);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            //睡3秒之后再修改num,防止A线程先修改了num,那么到while循环的时候就会直接跳出去了
            myData.addTo60();
            System.out.println(Thread.currentThread().getName() + "\t come out");
        },"A").start();


        while(myData.num == 0){
            //只有当num不等于0的时候,才会跳出循环
        }
    }
}

class MyData2{

//    volatile int num = 0;
     int num = 0;

    public void addTo60(){
        this.num = 60;
    }
}
